FastAPI च्या शक्तिशाली अवलंबित्व इंजेक्शन प्रणालीमध्ये खोलवर जा. मजबूत API विकासासाठी प्रगत तंत्र, कस्टम अवलंबित्व, स्कोप आणि टेस्टिंग धोरणे शिका.
FastAPI अवलंबित्व प्रणाली: प्रगत अवलंबित्व इंजेक्शन
FastAPI ची अवलंबित्व इंजेक्शन (DI) प्रणाली त्याच्या डिझाइनचा एक आधारस्तंभ आहे, जो मॉड्यूलरिटी, टेस्टेबिलिटी आणि पुन: वापरणीयतेला प्रोत्साहन देतो. मूलभूत वापरणे सोपे असले तरी, प्रगत DI तंत्रात प्रभुत्व मिळवणे महत्त्वपूर्ण शक्ती आणि लवचिकता अनलॉक करते. हा लेख FastAPI मधील प्रगत अवलंबित्व इंजेक्शनमध्ये, कस्टम अवलंबित्व, स्कोप, टेस्टिंग धोरणे आणि सर्वोत्तम पद्धतींचा समावेश करतो.
मूलभूत गोष्टी समजून घेणे
प्रगत विषयांवर जाण्यापूर्वी, FastAPI च्या अवलंबित्व इंजेक्शनच्या मूलभूत गोष्टींचा जलद आढावा घेऊया:
- अवलंबित्व कार्य म्हणून: अवलंबित्व नियमित पायथन फंक्शन्स म्हणून घोषित केले जातात.
- स्वयं इंजेक्शन: FastAPI टाइप हिंट्सवर आधारित पथ ऑपरेशनमध्ये आपोआप ही अवलंबित्व इंजेक्ट करते.
- कॉन्ट्रॅक्ट म्हणून टाइप हिंट्स: टाइप हिंट्स अवलंबित्व आणि पथ ऑपरेशन फंक्शन्ससाठी अपेक्षित इनपुट प्रकार परिभाषित करतात.
- श्रेणीबद्ध अवलंबित्व: अवलंबित्व इतर अवलंबित्ववर अवलंबून असू शकते, ज्यामुळे अवलंबित्व ट्री तयार होते.
येथे एक सोपे उदाहरण आहे:
from fastapi import FastAPI, Depends
app = FastAPI()
def get_db():
db = {"items": []}
try:
yield db
finally:
# Close the connection if needed
pass
@app.get("/items/")
async def read_items(db: dict = Depends(get_db)):
return db["items"]
या उदाहरणामध्ये, get_db हे एक अवलंबित्व आहे जे डेटाबेस कनेक्शन प्रदान करते. FastAPI आपोआप get_dbकॉल करते आणि परिणाम read_items फंक्शनमध्ये इंजेक्ट करते.
प्रगत अवलंबित्व तंत्र
1. अवलंबित्व म्हणून क्लासेसचा वापर करणे
फंक्शन्सचा वापर सामान्यतः केला जातो, तरीही क्लासेस अवलंबित्व म्हणून काम करू शकतात, ज्यामुळे अधिक जटिल स्टेट मॅनेजमेंट आणि पद्धतींना परवानगी मिळते. डेटाबेस कनेक्शन, प्रमाणीकरण सेवा किंवा इनिशियलायझेशन आणि साफसफाई आवश्यक असलेल्या इतर संसाधनांशी व्यवहार करताना हे विशेषतः उपयुक्त आहे.
from fastapi import FastAPI, Depends
app = FastAPI()
class Database:
def __init__(self):
self.connection = self.create_connection()
def create_connection(self):
# Simulate a database connection
print("Creating database connection...")
return {"items": []}
def close(self):
# Simulate closing a database connection
print("Closing database connection...")
def get_db():
db = Database()
try:
yield db.connection
finally:
db.close()
@app.get("/items/")
async def read_items(db: dict = Depends(get_db)):
return db["items"]
या उदाहरणामध्ये, Database वर्ग डेटाबेस कनेक्शन लॉजिक समाविष्ट करतो. get_db अवलंबित्व Database वर्गाचे उदाहरण तयार करते आणि कनेक्शनला उत्पन्न करते. finally ब्लॉक हे सुनिश्चित करतो की विनंतीवर प्रक्रिया केल्यानंतर कनेक्शन योग्यरित्या बंद केले जाईल.
2. अवलंबित्व ओव्हरराइड करणे
FastAPI आपल्याला अवलंबित्व ओव्हरराइड करण्याची परवानगी देते, जे टेस्टिंग आणि विकासासाठी महत्त्वपूर्ण आहे. आपल्या कोडला वेगळे करण्यासाठी आणि सुसंगत परिणाम सुनिश्चित करण्यासाठी आपण वास्तविक अवलंबित्व मॉक किंवा स्टबने बदलू शकता.
from fastapi import FastAPI, Depends
app = FastAPI()
# Original dependency
def get_settings():
# Simulate loading settings from a file or environment
return {"api_key": "real_api_key"}
@app.get("/items/")
async def read_items(settings: dict = Depends(get_settings)):
return {"api_key": settings["api_key"]}
# Override for testing
def get_settings_override():
return {"api_key": "test_api_key"}
app.dependency_overrides[get_settings] = get_settings_override
# To revert back to the original:
# del app.dependency_overrides[get_settings]
या उदाहरणामध्ये, get_settings अवलंबित्व get_settings_override ने ओव्हरराइड केले आहे. हे आपल्याला टेस्टिंगच्या उद्देशाने वेगळा API की वापरण्याची परवानगी देते.
3. रिक्वेस्ट-स्कोप्ड डेटासाठी `contextvars` वापरणे
contextvars हा पायथन मॉड्यूल आहे जो संदर्भ-स्थानिक व्हेरिएबल्स पुरवतो. हे विनंती-विशिष्ट डेटा, जसे की वापरकर्ता प्रमाणीकरण माहिती, विनंती आयडी किंवा ट्रेसिंग डेटा संग्रहित करण्यासाठी उपयुक्त आहे. FastAPI च्या अवलंबित्व इंजेक्शनसह contextvars वापरल्याने आपल्याला आपल्या संपूर्ण ऍप्लिकेशनमध्ये या डेटावर प्रवेश मिळवता येतो.
import contextvars
from fastapi import FastAPI, Depends, Request
app = FastAPI()
# Create a context variable for the request ID
request_id_var = contextvars.ContextVar("request_id")
# Middleware to set the request ID
@app.middleware("http")
async def add_request_id(request: Request, call_next):
request_id = str(uuid.uuid4())
request_id_var.set(request_id)
response = await call_next(request)
response.headers["X-Request-ID"] = request_id
return response
# Dependency to access the request ID
def get_request_id():
return request_id_var.get()
@app.get("/items/")
async def read_items(request_id: str = Depends(get_request_id)):
return {"request_id": request_id}
या उदाहरणामध्ये, एक मिडलवेअर प्रत्येक इनकमिंग विनंतीसाठी एक अद्वितीय विनंती आयडी सेट करते. get_request_id अवलंबित्व contextvars संदर्भातून विनंती आयडी पुनर्प्राप्त करते. हे आपल्याला आपल्या ऍप्लिकेशनमध्ये विनंत्यांचा मागोवा घेण्यास अनुमती देते.
4. असिंक्रोनस अवलंबित्व
FastAPI अखंडपणे असिंक्रोनस अवलंबित्व समर्थन करते. डेटाबेस क्वेरी किंवा बाह्य API कॉल्ससारख्या नॉन-ब्लॉकिंग I/O ऑपरेशन्ससाठी हे आवश्यक आहे. फक्त आपले अवलंबित्व फंक्शन async def फंक्शन म्हणून परिभाषित करा.
from fastapi import FastAPI, Depends
import asyncio
app = FastAPI()
async def get_data():
# Simulate an asynchronous operation
await asyncio.sleep(1)
return {"message": "Hello from async dependency!"}
@app.get("/items/")
async def read_items(data: dict = Depends(get_data)):
return data
या उदाहरणामध्ये, get_data अवलंबित्व हे एक असिंक्रोनस फंक्शन आहे जे विलंबचे अनुकरण करते. FastAPI आपोआप read_items फंक्शनमध्ये इंजेक्ट करण्यापूर्वी असिंक्रोनस अवलंबित्वचा परिणाम प्रतीक्षा करते.
5. संसाधने व्यवस्थापनासाठी जनरेटर वापरणे (डेटाबेस कनेक्शन, फाइल हँडल)
जनरेटर वापरणे (yield सह) स्वयंचलित संसाधन व्यवस्थापन प्रदान करते, त्रुटी आल्या तरीही `finally` ब्लॉकद्वारे संसाधने योग्यरित्या बंद/रिलीज (release) करण्याची हमी देते.
from fastapi import FastAPI, Depends
app = FastAPI()
def get_file_handle():
try:
file_handle = open("my_file.txt", "r")
yield file_handle
finally:
file_handle.close()
@app.get("/file_content/")
async def read_file_content(file_handle = Depends(get_file_handle)):
content = file_handle.read()
return {"content": content}
अवलंबित्व स्कोप आणि लाइफसायकल
अवलंबित्व स्कोप समजून घेणे अवलंबित्वच्या लाइफसायकलचे व्यवस्थापन करण्यासाठी आणि संसाधनांचे योग्य वाटप आणि रिलीझ (release) सुनिश्चित करण्यासाठी महत्त्वपूर्ण आहे. FastAPI इतर काही DI फ्रेमवर्कप्रमाणे (उदा. Spring's `@RequestScope`, `@ApplicationScope`) थेट स्पष्ट स्कोप एनोटेशन देत नाही, परंतु आपण अवलंबित्व कसे परिभाषित करता आणि आपण स्टेटचे व्यवस्थापन कसे करता याचे संयोजन समान परिणाम साधते.
रिक्वेस्ट स्कोप
हा सर्वात सामान्य स्कोप आहे. प्रत्येक विनंतीला अवलंबित्वचे नवीन उदाहरण प्राप्त होते. हे सामान्यत: अवलंबित्व फंक्शनमध्ये नवीन ऑब्जेक्ट तयार करून आणि ते उत्पन्न करून (yielding) साधले जाते, जसे की पूर्वी डेटाबेस उदाहरणामध्ये दर्शविले आहे. contextvars वापरणे देखील विनंती स्कोप साधण्यास मदत करते.
ॲप्लिकेशन स्कोप (सिंगलटन)
अवलंबित्वचे एकच उदाहरण तयार केले जाते आणि ॲप्लिकेशनच्या लाइफसायकलमध्ये सर्व विनंत्यांमध्ये सामायिक केले जाते. हे सहसा ग्लोबल व्हेरिएबल्स (global variables) किंवा क्लास-लेव्हल ॲट्रिब्यूट्स वापरून केले जाते.
from fastapi import FastAPI, Depends
app = FastAPI()
# Singleton instance
GLOBAL_SETTING = {"api_key": "global_api_key"}
def get_global_setting():
return GLOBAL_SETTING
@app.get("/items/")
async def read_items(setting: dict = Depends(get_global_setting)):
return setting
म्युटेबल (mutable) स्टेटसह ॲप्लिकेशन-स्कोप्ड अवलंबित्व वापरताना सावधगिरी बाळगा, कारण एका विनंतीद्वारे केलेले बदल इतर विनंत्यांना प्रभावित करू शकतात. आपल्या ॲप्लिकेशनमध्ये एकाच वेळी अनेक विनंत्या असल्यास सिंक्रोनायझेशन यंत्रणा (उदाहरणार्थ, लॉक्स, इ.) आवश्यक असू शकतात.
सत्र स्कोप (वापरकर्ता-विशिष्ट डेटा)
अवलंबित्व वापरकर्ता सत्रांशी जोडा. यासाठी सत्र व्यवस्थापन यंत्रणा (उदाहरणार्थ, कुकीज किंवा JWTs वापरणे) आवश्यक आहे आणि सामान्यत: सत्रातील डेटा मध्ये अवलंबित्व संग्रहित करणे समाविष्ट आहे.
from fastapi import FastAPI, Depends, Cookie
from typing import Optional
import uuid
app = FastAPI()
# In a real app, store sessions in a database or cache
sessions = {}
async def get_user_id(session_id: Optional[str] = Cookie(None)) -> str:
if session_id is None or session_id not in sessions:
session_id = str(uuid.uuid4())
sessions[session_id] = {"user_id": str(uuid.uuid4())} # Assign a random user ID
return sessions[session_id]["user_id"]
@app.get("/profile/")
async def read_profile(user_id: str = Depends(get_user_id)):
return {"user_id": user_id}
अवलंबित्वची टेस्टिंग
अवलंबित्व इंजेक्शनचा एक प्राथमिक फायदा म्हणजे सुधारित टेस्टेबिलिटी. घटकांना डिस्कपल (decoupling) करून, आपण टेस्टिंग दरम्यान सहजपणे अवलंबित्व मॉक किंवा स्टबने बदलू शकता.
1. टेस्टमध्ये अवलंबित्व ओव्हरराइड करणे
पूर्वी दर्शविल्याप्रमाणे, FastAPI ची dependency_overrides यंत्रणा टेस्टिंगसाठी आदर्श आहे. मॉक अवलंबित्व तयार करा जे अंदाजित परिणाम देतात आणि आपल्या टेस्ट अंतर्गत कोडला वेगळे करण्यासाठी त्यांचा वापर करा.
from fastapi.testclient import TestClient
from fastapi import FastAPI, Depends
app = FastAPI()
# Original dependency
def get_external_data():
# Simulate fetching data from an external API
return {"data": "Real external data"}
@app.get("/data/")
async def read_data(data: dict = Depends(get_external_data)):
return data
# Test
from unittest.mock import MagicMock
def get_external_data_mock():
return {"data": "Mocked external data"}
def test_read_data():
app.dependency_overrides[get_external_data] = get_external_data_mock
client = TestClient(app)
response = client.get("/data/")
assert response.status_code == 200
assert response.json() == {"data": "Mocked external data"}
# Clean up overrides
app.dependency_overrides.clear()
2. मॉक (Mocking) लायब्ररी वापरणे
unittest.mock सारख्या लायब्ररी मॉक ऑब्जेक्ट (mock objects) तयार करण्यासाठी आणि त्यांच्या वर्तनावर नियंत्रण ठेवण्यासाठी शक्तिशाली साधने प्रदान करतात. आपण जटिल अवलंबित्वचे अनुकरण करण्यासाठी आणि आपला कोड त्यांच्याशी योग्यरित्या संवाद साधतो हे सत्यापित करण्यासाठी मॉक वापरू शकता.
import unittest
from unittest.mock import MagicMock
# (Define the FastAPI app and get_external_data as above)
class TestReadData(unittest.TestCase):
def test_read_data_with_mock(self):
# Create a mock for the get_external_data dependency
mock_get_external_data = MagicMock(return_value={"data": "Mocked data from unittest"})
# Override the dependency with the mock
app.dependency_overrides[get_external_data] = mock_get_external_data
client = TestClient(app)
response = client.get("/data/")
self.assertEqual(response.status_code, 200)
self.assertEqual(response.json(), {"data": "Mocked data from unittest"})
# Assert that the mock was called
mock_get_external_data.assert_called_once()
# Clean up overrides
app.dependency_overrides.clear()
3. युनिट टेस्टिंगसाठी अवलंबित्व इंजेक्शन (FastAPI संदर्भाच्या बाहेर)
API एंडपॉइंट हँडलर्सच्या *बाहेरील* युनिट टेस्टिंग फंक्शन्समध्ये देखील, अवलंबित्व इंजेक्शनची तत्त्वे लागू होतात. FastAPI च्या `Depends` वर अवलंबून राहण्याऐवजी, टेस्ट अंतर्गत फंक्शनमध्ये व्यक्तिचलितपणे अवलंबित्व इंजेक्ट करा.
# Example function to test
def process_data(data_source):
data = data_source.fetch_data()
# ... process the data ...
return processed_data
class MockDataSource:
def fetch_data(self):
return {"example": "data"}
# Unit test
def test_process_data():
mock_data_source = MockDataSource()
result = process_data(mock_data_source)
# Assertions on the result
अवलंबित्व इंजेक्शनसह सुरक्षा विचार
अवलंबित्व इंजेक्शन, फायदेशीर असताना, योग्यरित्या अंमलात न आणल्यास संभाव्य सुरक्षा चिंता निर्माण करते.
1. अवलंबित्व गोंधळ
आपण विश्वसनीय स्त्रोतांकडून अवलंबित्व खेचत (pulling) आहात हे सुनिश्चित करा. पॅकेजची अखंडता (integrity) सत्यापित करा आणि असुरक्षितता स्कॅनिंग क्षमता असलेले पॅकेज व्यवस्थापक वापरा. हे एक सामान्य सॉफ्टवेअर पुरवठा साखळी सुरक्षा तत्त्व आहे, परंतु DI मुळे ते वाढवले जाते कारण आपण विविध स्त्रोतांकडून घटक इंजेक्ट करत असाल.
2. दुर्भावनापूर्ण अवलंबित्वचे इंजेक्शन
अवलंबित्व (dependencies) ज्या योग्य प्रमाणीकरणाशिवाय बाह्य इनपुट स्वीकारतात, त्याबद्दल जागरूक रहा. एक हल्लेखोर संभाव्यतः तडजोड केलेल्या अवलंबित्वद्वारे दुर्भावनापूर्ण कोड किंवा डेटा इंजेक्ट करू शकतो. सर्व वापरकर्ता इनपुट सॅनिटाइझ (sanitize) करा आणि मजबूत प्रमाणीकरण यंत्रणा लागू करा.
3. अवलंबित्वद्वारे माहिती गळती
अवलंबित्व चुकून संवेदनशील माहिती उघड करत नाहीत हे सुनिश्चित करा. संभाव्य माहिती गळती असुरक्षा ओळखण्यासाठी आपल्या अवलंबित्वचा कोड आणि कॉन्फिगरेशनचे पुनरावलोकन करा.
4. हार्डकोडेड रहस्ये
आपल्या अवलंबित्व कोडमध्ये थेट रहस्ये (API की, डेटाबेस पासवर्ड, इ.) हार्डकोडिंग करणे टाळा. रहस्ये संग्रहित (store) आणि व्यवस्थापित करण्यासाठी पर्यावरण व्हेरिएबल्स (environment variables) किंवा सुरक्षित कॉन्फिगरेशन व्यवस्थापन साधने वापरा.
import os
from fastapi import FastAPI, Depends
app = FastAPI()
def get_api_key():
api_key = os.environ.get("API_KEY")
if not api_key:
raise ValueError("API_KEY environment variable not set.")
return api_key
@app.get("/secure_endpoint/")
async def secure_endpoint(api_key: str = Depends(get_api_key)):
# Use api_key for authentication/authorization
return {"message": "Access granted"}
अवलंबित्व इंजेक्शनसह कार्यक्षमतेचे अनुकूलन
अवलंबित्व इंजेक्शनचा वापर योग्यरित्या न केल्यास कार्यक्षमतेवर परिणाम होऊ शकतो. येथे काही अनुकूलन धोरणे दिली आहेत:
1. अवलंबित्व निर्मितीची किंमत कमी करा
शक्य असल्यास, प्रत्येक विनंतीवर महाग अवलंबित्व (expensive dependencies) तयार करणे टाळा. जर अवलंबित्व स्टेटलेस (stateless) असेल किंवा विनंत्यांमध्ये सामायिक केले जाऊ शकत असेल, तर सिंगलटन स्कोप (singleton scope) वापरण्याचा किंवा अवलंबित्व उदाहरणाचे कॅशिंग (caching) करण्याचा विचार करा.
2. सुस्त आरंभ (Lazy Initialization)
आवश्यकतेनुसार अवलंबित्व सुरू करा. हे स्टार्टअप (startup) वेळ आणि मेमरीचा वापर कमी करू शकते, विशेषत: बर्याच अवलंबित्व असलेल्या ॲप्लिकेशन्ससाठी.
3. अवलंबित्व परिणामांचे कॅशिंग
अवलंबित्वच्या महागड्या गणनेचे (expensive computations) परिणाम कॅश करा, जर परिणाम पुन्हा वापरले जाण्याची शक्यता असेल. अवलंबित्व परिणाम संग्रहित (store) आणि पुनर्प्राप्त (retrieve) करण्यासाठी कॅशिंग यंत्रणा (उदाहरणार्थ, Redis, Memcached) वापरा.
4. अवलंबित्व ग्राफ ऑप्टिमाइझ करा
संभाव्य अडथळे (bottlenecks) ओळखण्यासाठी आपल्या अवलंबित्व आलेखाचे (graph) विश्लेषण करा. अवलंबित्वची रचना सुलभ करा आणि शक्य असल्यास अवलंबित्वची संख्या कमी करा.
5. I/O बाउंड ऑपरेशन्ससाठी असिंक्रोनस अवलंबित्व
ब्लॉकिंग I/O ऑपरेशन्स (blocking I/O operations) करत असताना, जसे की डेटाबेस क्वेरी किंवा बाह्य API कॉल्स, async अवलंबित्व वापरा. हे मुख्य थ्रेडला ब्लॉक होण्यापासून प्रतिबंधित करते आणि एकूण ॲप्लिकेशनची प्रतिसादक्षमता सुधारते.
FastAPI अवलंबित्व इंजेक्शनसाठी सर्वोत्तम पद्धती
- अवलंबित्व सोपे ठेवा: लहान, केंद्रित अवलंबित्व (focused dependencies) ज्या एकाच कार्याचे (single task) कार्य करतात, त्यांचे लक्ष्य ठेवा. हे वाचनीयता, टेस्टेबिलिटी (testability) आणि देखभालक्षमता सुधारते.
- टाइप हिंट्स वापरा: अवलंबित्वच्या अपेक्षित इनपुट (input) आणि आउटपुट (output) प्रकारांना स्पष्टपणे परिभाषित करण्यासाठी टाइप हिंट्सचा उपयोग करा. हे कोडची स्पष्टता सुधारते आणि FastAPI ला स्थिर टाइप चेकिंग (static type checking) करण्याची परवानगी देते.
- अवलंबित्व दस्तऐवजीकरण (Document Dependencies) करा: प्रत्येक अवलंबित्वचा उद्देश आणि वापर दस्तऐवजीकरण करा. हे इतर विकासकांना आपला कोड कसा वापरावा आणि कसा देखभाल करावा हे समजून घेण्यास मदत करते.
- अवलंबित्वची पूर्णपणे टेस्ट करा: आपल्या अवलंबित्वची अपेक्षाप्रमाणे वागणूक आहे हे सुनिश्चित करण्यासाठी त्यांच्यासाठी युनिट टेस्ट लिहा. हे बग्स (bugs) टाळण्यास आणि आपल्या ॲप्लिकेशनची एकूण विश्वासार्हता सुधारण्यास मदत करते.
- सुसंगत नामकरण (Naming Conventions) वापरा: कोडची वाचनीयता सुधारण्यासाठी आपल्या अवलंबित्वसाठी सुसंगत नामकरण वापरा.
- परिपत्रक अवलंबित्व (Circular Dependencies) टाळा: परिपत्रक अवलंबित्व जटिल आणि डीबग करण्यास कठीण कोड तयार करू शकते. परिपत्रक अवलंबित्व दूर करण्यासाठी आपला कोड रिफॅक्टर (refactor) करा.
- अवलंबित्व इंजेक्शन कंटेनरचा विचार करा (पर्यायी): FastAPI चे अंगभूत (built-in) अवलंबित्व इंजेक्शन बर्याच प्रकरणांसाठी पुरेसे असले तरी, अधिक जटिल ॲप्लिकेशन्ससाठी समर्पित अवलंबित्व इंजेक्शन कंटेनर (उदाहरणार्थ, `inject`, `autowire`) वापरण्याचा विचार करा.
निष्कर्ष
FastAPI ची अवलंबित्व इंजेक्शन प्रणाली एक शक्तिशाली साधन आहे जी मॉड्यूलरिटी, टेस्टेबिलिटी (testability) आणि पुन: वापरणीयतेला प्रोत्साहन देते. प्रगत तंत्रात प्रभुत्व मिळवून, जसे की क्लासेसचा अवलंबित्व म्हणून वापर करणे, अवलंबित्व ओव्हरराइड करणे आणि contextvars वापरणे, आपण मजबूत आणि स्केलेबल (scalable) API तयार करू शकता. संसाधनांचे प्रभावी व्यवस्थापन करण्यासाठी अवलंबित्व स्कोप (scope) आणि लाइफसायकल (lifecycle) समजून घेणे आवश्यक आहे. आपल्या ॲप्लिकेशन्सची विश्वासार्हता (reliability) आणि सुरक्षितता सुनिश्चित करण्यासाठी नेहमी आपल्या अवलंबित्वची पूर्णपणे टेस्टिंगला प्राधान्य द्या. सर्वोत्तम पद्धतींचे अनुसरण करून आणि संभाव्य सुरक्षा आणि कार्यक्षमतेच्या (performance) परिणामांचा विचार करून, आपण FastAPI च्या अवलंबित्व इंजेक्शन प्रणालीची संपूर्ण क्षमता वापरू शकता.